package com.lucian.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;

import java.awt.AWTException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) throws AWTException, IOException, InterruptedException {
		final JFrame jf = new JFrame("测试窗口");
		jf.setSize(300, 300);
		jf.setLocationRelativeTo(null);
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        /*
         * 创建一个菜单栏
         */
		JMenuBar menuBar = new JMenuBar();

        /*
         * 创建一级菜单
         */
		JMenu fileMenu = new JMenu("文件");
		JMenu editMenu = new JMenu("编辑");
		JMenu viewMenu = new JMenu("视图");
		JMenu aboutMenu = new JMenu("关于");
		// 一级菜单添加到菜单栏
		menuBar.add(fileMenu);
		menuBar.add(editMenu);
		menuBar.add(viewMenu);
		menuBar.add(aboutMenu);

        /*
         * 创建 "文件" 一级菜单的子菜单
         */
		JMenuItem newMenuItem = new JMenuItem("新建");
		JMenuItem openMenuItem = new JMenuItem("打开");
		JMenuItem exitMenuItem = new JMenuItem("退出");
		// 子菜单添加到一级菜单
		fileMenu.add(newMenuItem);
		fileMenu.add(openMenuItem);
		fileMenu.addSeparator();       // 添加一条分割线
		fileMenu.add(exitMenuItem);

        /*
         * 创建 "编辑" 一级菜单的子菜单
         */
		JMenuItem copyMenuItem = new JMenuItem("复制");
		JMenuItem pasteMenuItem = new JMenuItem("粘贴");
		// 子菜单添加到一级菜单
		editMenu.add(copyMenuItem);
		editMenu.add(pasteMenuItem);

        /*
         * 创建 "视图" 一级菜单的子菜单
         */
		final JCheckBoxMenuItem checkBoxMenuItem = new JCheckBoxMenuItem("复选框子菜单");
		final JRadioButtonMenuItem radioButtonMenuItem01 = new JRadioButtonMenuItem("单选按钮子菜单01");
		final JRadioButtonMenuItem radioButtonMenuItem02 = new JRadioButtonMenuItem("单选按钮子菜单02");
		// 子菜单添加到一级菜单
		viewMenu.add(checkBoxMenuItem);
		viewMenu.addSeparator();                // 添加一个分割线
		viewMenu.add(radioButtonMenuItem01);
		viewMenu.add(radioButtonMenuItem02);

		// 其中两个 单选按钮子菜单，要实现单选按钮的效果，需要将它们放到一个按钮组中
		ButtonGroup btnGroup = new ButtonGroup();
		btnGroup.add(radioButtonMenuItem01);
		btnGroup.add(radioButtonMenuItem02);

		// 默认第一个单选按钮子菜单选中
		radioButtonMenuItem01.setSelected(true);

        /*
         * 菜单项的点击/状态改变事件监听，事件监听可以直接设置在具体的子菜单上（这里只设置其中几个）
         */
		// 设置 "新建" 子菜单被点击的监听器
		newMenuItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("新建  被点击");
			}
		});
		// 设置 "打开" 子菜单被点击的监听器
		openMenuItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("打开  被点击");
				try {
					Runtime.getRuntime().exec("java -version");
//					int exitValue = process.waitFor();

					System.out.println("打开  被点击2");
				} catch (Throwable info) {
					System.out.println("cuowu"+ info);
				}
			}
		});
		// 设置 "退出" 子菜单被点击的监听器
		exitMenuItem.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("退出  被点击");
				System.exit(0);
			}
		});

		// 设置 复选框子菜单 状态改变 监听器
		checkBoxMenuItem.addChangeListener(new ChangeListener() {
			@Override
			public void stateChanged(ChangeEvent e) {
				System.out.println("复选框是否被选中: " + checkBoxMenuItem.isSelected());
			}
		});

		// 设置 单选按钮子菜单 状态改变 监听器
		radioButtonMenuItem01.addChangeListener(new ChangeListener() {
			@Override
			public void stateChanged(ChangeEvent e) {
				System.out.println("单选按钮01 是否被选中: " + radioButtonMenuItem01.isSelected());
			}
		});

        /*
         * 最后 把菜单栏设置到窗口
         */
		jf.setJMenuBar(menuBar);

//		jf.setSize(Toolkit.getDefaultToolkit().getScreenSize());
//		jf.setLocation(0,0);
//		GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(jf);
//		jf.setExtendedState(JFrame.MAXIMIZED_BOTH);
// 		jf.show();
		jf.setVisible(true);

	}

}
